import jwt from 'jsonwebtoken';

/**
 * @fileoverview Token生成与验证工具
 * @description 提供JWT(JSON Web Token)的生成、验证和解析功能
 */

// 从环境变量获取JWT密钥，如果没有则使用默认值
const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key'; // 注意：生产环境应从环境变量设置安全的密钥
const JWT_EXPIRES_IN = '24h'; // token有效期

/**
 * 生成JWT Token
 * @param {Object} payload - 要包含在token中的数据
 * @returns {string} 生成的token字符串
 */
export function generateToken(payload) {
  try {
    const token = jwt.sign(payload, JWT_SECRET, {
      expiresIn: JWT_EXPIRES_IN
    });
    return token;
  } catch (error) {
    console.error('生成Token失败：', error.message);
    throw new Error('Token生成失败');
  }
}

/**
 * 验证JWT Token
 * @param {string} token - 要验证的token字符串
 * @returns {Object} 解析后的payload数据
 */
export function verifyToken(token) {
  try {
    const decoded = jwt.verify(token, JWT_SECRET);
    return decoded;
  } catch (error) {
    console.error('验证Token失败：', error.message);
    throw new Error('无效的Token');
  }
}

/**
 * 解析JWT Token（不验证签名）
 * @param {string} token - 要解析的token字符串
 * @returns {Object} 解析后的payload数据
 */
export function decodeToken(token) {
  try {
    return jwt.decode(token);
  } catch (error) {
    console.error('解析Token失败：', error.message);
    throw new Error('Token格式错误');
  }
}